home *** CD-ROM | disk | FTP | other *** search
/ Clickx 65 / Clickx 65.iso / software / internet / xmarks / xmarks-3.1.1.xpi / chrome / content / foxmarks-uitools.js < prev    next >
Encoding:
JavaScript  |  2009-05-05  |  10.9 KB  |  337 lines

  1. /* 
  2.  Copyright 2009 Foxmarks Inc.
  3.  
  4.  foxmarks-uitools.js: Various and sundry UI functions. 
  5.  
  6.  */
  7.  
  8. var Cc = Components.classes;
  9. var Ci = Components.interfaces;
  10.  
  11. function FoxmarksOpenWindowByType(inType, uri, features, args) {
  12.     var wm = Cc['@mozilla.org/appshell/window-mediator;1'].
  13.         getService(Ci.nsIWindowMediator);
  14.     var topWindow = wm.getMostRecentWindow(inType);
  15.  
  16.     if (topWindow) {
  17.         topWindow.focus();
  18.     } else {
  19.         topWindow = wm.getMostRecentWindow(null);
  20.         var win = topWindow.openDialog(uri, "_blank", features || "chrome",
  21.             args);
  22.     }
  23. }
  24.  
  25. function FoxmarksOpenInNewTab(url, focus, postData) {
  26.     var wm = Cc['@mozilla.org/appshell/window-mediator;1'].
  27.         getService(Ci.nsIWindowMediator);
  28.     var topWindow = wm.getMostRecentWindow('navigator:browser');
  29.     if (topWindow) {
  30.         var content = topWindow.document.getElementById('content');
  31.         if(postData !== undefined){
  32.             var stringStream = Cc["@mozilla.org/io/string-input-stream;1"].
  33.                 createInstance(Ci.nsIStringInputStream);
  34.             var txt = postData.toJSONString();
  35.             if ("data" in stringStream) // Gecko 1.9 or newer
  36.                     stringStream.data = txt;
  37.             else // 1.8 or older
  38.                 stringStream.setData(txt, txt.length);
  39.                                
  40.             var pd = Cc["@mozilla.org/network/mime-input-stream;1"].
  41.                            createInstance(Ci.nsIMIMEInputStream);
  42.             pd.addHeader("Content-Type", "application/json");
  43.             pd.addContentLength = true;
  44.             pd.setData(stringStream);
  45.  
  46.             content.selectedTab =
  47.                 content.addTab(url, null,null , pd);
  48.         } else {
  49.             content.selectedTab =
  50.                 content.addTab(url);
  51.         }
  52.         if (focus) {
  53.             topWindow.focus();
  54.         }
  55.     }
  56. }
  57.  
  58. function FoxmarksOpenInNewWindow(url) {
  59.     openDialog("chrome://browser/content/browser.xul", "_blank",
  60.         "chrome,all,dialog=no", url);
  61. }
  62.  
  63. function OpenFoxmarksSettingsDialog(pane) {
  64.     FoxmarksOpenWindowByType("foxmarks:settings",
  65.         "chrome://foxmarks/content/foxmarks-dialog.xul", 
  66.         "chrome,toolbar,centerscreen",
  67.         [pane || "foxmarks-mainpane"]);
  68. }
  69.  
  70. function MyFoxmarks() {
  71.     if(gSettings.securityLevel == 1){
  72.         FoxmarksOpenInNewTab("https://my.xmarks.com/", true);
  73.     } else {
  74.         FoxmarksOpenInNewTab("http://my.xmarks.com/", true);
  75.     }
  76. }
  77.  
  78. function FoxmarksOpenWizard(manual, skipAuth) {
  79.     if (skipAuth) {
  80.         FoxmarksOpenWindowByType("foxmarks:setup",
  81.             "chrome://foxmarks/content/foxmarks-setup.xul",
  82.             "chrome,centerscreen,dialog=no", manual);
  83.     } else {
  84.         FoxmarksOpenWindowByType("foxmarks:login", 
  85.             "chrome://foxmarks/content/foxmarks-login.xul",
  86.             "chrome,centerscreen,dialog=no", manual);
  87.     }
  88. }
  89.  
  90. function FoxmarksOnWizardCancel() {
  91.     var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  92.         .getService(Components.interfaces.nsIPromptService);
  93.  
  94.     var checkResult = {};
  95.     checkResult.value = gSettings.wizardSuppress;
  96.     var sb = Bundle();
  97.  
  98.     var ret = ps.confirmCheck(window, sb.GetStringFromName("title.cancelsetup"),
  99.             sb.GetStringFromName("msg.cancelsetup"),
  100.             sb.GetStringFromName("msg.nowizard"),
  101.             checkResult);
  102.  
  103.     gSettings.wizardSuppress = checkResult.value;
  104.     gSettings.majorVersion = 3;
  105.  
  106.     return ret;
  107. }
  108.  
  109. function FoxmarksSynch() {
  110.     PerformAction("synch");
  111. }
  112.  
  113. function FoxmarksOpenStatusWindow() {
  114.     PerformAction("showStatus");
  115. }
  116.  
  117. function PerformAction(action, arg) {
  118.     var retval = { helpurl: null };
  119.  
  120.     try {
  121.         var win = window.openDialog(
  122.             "chrome://foxmarks/content/foxmarks-progress.xul", "_blank",
  123.             "chrome,dialog,modal,centerscreen", action, retval, arg);
  124.         if (retval.helpurl) {
  125.             FoxmarksOpenInNewWindow(retval.helpurl);   
  126.         }
  127.     } catch (e) {
  128.        // FoxmarksAlert(e.message);
  129.     }
  130.     /*
  131.     if (retval.status == 401) {
  132.         FoxmarksAlert(Bundle().GetStringFromName("msg.invalidcredentials"));
  133.     }
  134.     */
  135.     return retval.status;
  136. }
  137.  
  138. var XmarksDataServiceObserver = {
  139.     os: Cc["@mozilla.org/observer-service;1"].
  140.         getService(Ci.nsIObserverService),
  141.  
  142.     observe: function(subject, topic, data) {
  143.         var result = eval("(" + data + ")");
  144.         this.os.removeObserver(this, "foxmarks-dataservice");
  145.         if (this.spinner) {
  146.             this.spinner.hidden = true;
  147.         }
  148.         if (this.callback) {
  149.             var callback = this.callback;
  150.             this.callback = null;
  151.             callback(result);
  152.         }
  153.     },
  154.  
  155.     start: function(text, spinner, callback) {
  156.         this.os.addObserver(this, 
  157.                 "foxmarks-dataservice", false);
  158.         this.text = text;
  159.         this.spinner = spinner;
  160.         this.callback = callback;
  161.         if (this.spinner) {
  162.             this.spinner.hidden = false;
  163.         }
  164.     }
  165. };
  166. var XmarksServiceObserver = {
  167.     os: Cc["@mozilla.org/observer-service;1"].
  168.         getService(Ci.nsIObserverService),
  169.  
  170.     observe: function(subject, topic, data) {
  171.         var result = eval("(" + data + ")");
  172.         if (this.text) {
  173.             this.text.value = result.msg;
  174.         }
  175.         if (result.status != 1 && result.status != 3) {
  176.             this.os.removeObserver(this, "foxmarks-service");
  177.             if (this.spinner) {
  178.                 this.spinner.hidden = true;
  179.             }
  180.             if (this.callback) {
  181.                 var callback = this.callback;
  182.                 this.callback = null;
  183.                 callback(result);
  184.             }
  185.         }
  186.     },
  187.  
  188.     start: function(text, spinner, callback) {
  189.         this.os.addObserver(XmarksServiceObserver, "foxmarks-service", false);
  190.         this.text = text;
  191.         this.spinner = spinner;
  192.         this.callback = callback;
  193.         if (this.spinner) {
  194.             this.spinner.hidden = false;
  195.         }
  196.     }
  197. }
  198.  
  199. function TurboTagsCancel() {
  200.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  201.         getService(Ci.nsIFoxmarksService);
  202.     fms.datacancel();
  203. }
  204. function FetchTurboTags(url, text, spinner, callback) {
  205.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  206.         getService(Ci.nsIFoxmarksService);
  207.     XmarksDataServiceObserver.start(text, spinner, callback);
  208.     if (!fms.getTurboTags(url)) {
  209.         callback({status: 2, msg: "Whoops! We're busy!" });
  210.     }
  211.     return true;
  212. }
  213.  
  214. function SimilarSitesCancel() {
  215.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  216.         getService(Ci.nsIFoxmarksService);
  217.     fms.datacancel();
  218. }
  219. function FetchSimilarSites(url, text, spinner, callback) {
  220.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  221.         getService(Ci.nsIFoxmarksService);
  222.     XmarksDataServiceObserver.start(text, spinner, callback);
  223.     if (!fms.getSimilarSites(url)) {
  224.         callback({status: 2, msg: "Whoops! We're busy!" });
  225.     }
  226.     return true;
  227. }
  228. function FetchProfileNames(text, spinner, menuPopup, callback) {
  229.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  230.         getService(Ci.nsIFoxmarksService);
  231.     XmarksServiceObserver.start(text, spinner, FetchProfileNamesCallback);
  232.     if (!fms.getProfileNames()) {
  233.         callback({status: 2, msg: "Whoops! We're busy!" });
  234.     }
  235.  
  236.     function FetchProfileNamesCallback(response) {
  237.         if (response.profiles) {
  238.             var profiles = response.profiles;
  239.             var count = 0;
  240.             for (var i = 1; i < menuPopup.childNodes.length; ++i) {
  241.                 if (profiles[String(i)]) {
  242.                     var name = profiles[String(i)];
  243.                     menuPopup.childNodes[i].label = name;
  244.                     menuPopup.childNodes[i].hidden = false;
  245.                     count++;
  246.                 } else {
  247.                     menuPopup.childNodes[i].hidden = true;
  248.                 }
  249.             }
  250.             if (callback) {
  251.                 callback({ status: response.status, count: count, 
  252.                         profiles: profiles });
  253.             }
  254.         }
  255.     }
  256. }
  257.  
  258. function VerifyPINStatus(pin, text, spinner, callback) {
  259.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  260.         getService(Ci.nsIFoxmarksService);
  261.     XmarksServiceObserver.start(text, spinner, callback);
  262.     fms.verifypin(pin);
  263. }
  264.  
  265. function FetchAccountStatus(syncType, text, spinner, callback) {
  266.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  267.         getService(Ci.nsIFoxmarksService);
  268.     XmarksServiceObserver.start(text, spinner, callback);
  269.     fms.status(syncType);
  270. }
  271.  
  272. function FetchAccountExtStatus(syncType, text, spinner, callback) {
  273.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  274.         getService(Ci.nsIFoxmarksService);
  275.     XmarksServiceObserver.start(text, spinner, callback);
  276.     fms.extstatus(syncType);
  277. }
  278.  
  279. var inputTimer;
  280. function handlePasswordMeter(id){
  281.     if(inputTimer){
  282.         window.clearTimeout(inputTimer);
  283.         inputTimer = undefined;
  284.     }
  285.  
  286.     inputTimer = window.setTimeout(function(){
  287.         var txt = document.getElementById(id).value;
  288.         var result = TestPassword(txt);
  289.  
  290.         if(result * 5 > 200 || result > 24){
  291.             result = 40;
  292.         }
  293.         document.getElementById('passwordmeter').width = result * 5;
  294.         if(txt.length < 4){
  295.             document.getElementById('passwordStrength').style.color = 
  296.                 "#333";
  297.             document.getElementById('passwordmeter').style.backgroundColor = 
  298.                 "#999";
  299.  
  300.             document.getElementById('passwordStrength').value =
  301.                 Bundle().GetStringFromName("password.tooshort");
  302.         }
  303.         else if(result < 17){
  304.             document.getElementById('passwordStrength').value =
  305.                 Bundle().GetStringFromName("password.weak");
  306.             document.getElementById('passwordStrength').style.color = 
  307.                 "#57040F";
  308.             document.getElementById('passwordmeter').style.backgroundColor = 
  309.                 "#57040F";
  310.         }
  311.         else if(result < 24){
  312.             document.getElementById('passwordStrength').value =
  313.                 Bundle().GetStringFromName("password.good");
  314.             document.getElementById('passwordStrength').style.color = 
  315.                 "#ED9D2B";
  316.             document.getElementById('passwordmeter').style.backgroundColor = 
  317.                 "#ED9D2B";
  318.         }
  319.         else {
  320.             document.getElementById('passwordStrength').value =
  321.                 Bundle().GetStringFromName("password.strong");
  322.             document.getElementById('passwordStrength').style.color = 
  323.                 "#2A911B";
  324.             document.getElementById('passwordmeter').style.backgroundColor = 
  325.                 "#2A911B";
  326.  
  327.         }
  328.         inputTimer = undefined;
  329.         /*
  330.         if(window)
  331.             window.sizeToContent();
  332.  
  333.         */
  334.     }, 500);
  335. }
  336.  
  337.